﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using IndignaFramework.Models;
using System.Net;
using System.IO;
using System.Xml;

namespace IndignaFramework.Controllers
{
    public class UsuarioController : Controller
    {

        private Model1Container db = new Model1Container();

        //
        // GET: /Usuario/

        public ActionResult Index()
        {
            return View(db.Usuario.ToList());
        }

        //
        // GET: /Usuario/Create

        public ActionResult Crear()
        {
            return View();
        }

        //
        // POST: /Usuario/Create

        [HttpPost]
        public ActionResult Crear(UsuarioWeb usuario)
        {
            if (ModelState.IsValid)
            {

                //Agrego el usuario al movimiento
                usuario.Movimiento = Movimiento.CreateMovimiento(0, "movimiento", 0, 0, "descripcion", "logo", "css", 0, 0, 0, 0);
                usuario.Movimiento.AdministradorWeb = AdministradorWeb.CreateAdministradorWeb(0, "email", "pass");

                usuario.FechaRegistro = DateTime.Now;
                usuario.Activo = true;
                usuario.CantiBorrados = 0;

                WebClient client = new WebClient();
                string url = "http://maps.googleapis.com/maps/api/geocode/xml?address=" + usuario.Direccion + "," + usuario.Ciudad + "," + usuario.Pais + "&sensor=false";
                Stream rssFeedStream = client.OpenRead(url);
                XmlReader reader = XmlReader.Create(rssFeedStream);

                reader.MoveToContent();
                reader.ReadToFollowing("status");
                string lat = "";
                string lon = "";
                string status = reader.ReadElementContentAsString();
                if (status.Equals("OK"))
                {
                    reader.ReadToFollowing("location");
                    reader.ReadToFollowing("lat");
                    lat = reader.ReadElementContentAsString().Replace(".", ",");
                    reader.ReadToFollowing("lng");
                    lon = reader.ReadElementContentAsString().Replace(".", ",");
                    usuario.Latitud = float.Parse(lat);
                    usuario.Longitud = float.Parse(lon);
                }
                else
                {
                    return View("Crear");
                }
                db.Usuario.AddObject(usuario);
                db.SaveChanges();
                return View("ConfirmarUbicacion",usuario);
            }

            return View(usuario);
        }

        //
        // GET: /Usuario/ConfirmarUbicacion
        
        public ActionResult ConfirmarUbicacion(UsuarioWeb usuario)
        {
            return View(usuario);
        }

        //
        // POST: /Usuario/ConfirmarUbicacionPost

        [HttpPost]
        public ActionResult ConfirmarUbicacionPost()
        {
            return RedirectToAction("Crear");
        }

        //
        // POST: /Usuario/CambiarUbicacion

        [HttpPost]
        public ActionResult CambiarUbicacion(UsuarioWeb usuario, double latitud, double longitud)
        {
            UsuarioWeb usr = (UsuarioWeb)db.Usuario.Single(u => u.id == usuario.id);
            usr.Latitud = latitud;
            usr.Longitud = longitud;
            db.SaveChanges();
            return RedirectToAction("Crear");
        }

    }
}
